import { Injectable } from '@nestjs/common';
import axios from 'axios';
import { DeepSeekRequest, DeepSeekResponse, DeepSeekInterpretationRequest, DeepSeekInterpretationResult } from './deepseek.types';

@Injectable()
export class DeepSeekService {
  private readonly apiKey = 'sk-f1c552931f35494cabbd00c020c097cf';
  private readonly apiUrl = 'https://api.deepseek.com/v1/chat/completions';

  async interpretGua(interpretationRequest: DeepSeekInterpretationRequest): Promise<DeepSeekInterpretationResult> {
    const systemPrompt = `你是一位资深的易经大师，精通周易六十四卦的解读。请根据用户提供的卦象信息和具体问题，给出针对性的专业解读。

解读要求：
1. 严格根据用户的问题进行回答，不要使用**或####等Markdown符号
2. 回答格式：
   - 首先明确回答用户的问题
   - 然后结合卦象详细解释
   - 最后给出具体建议
3. 分析步骤：
   - 理解用户问题的核心
   - 结合卦名、卦辞和象辞分析问题
   - 如果有变爻，分析变爻的影响
4. 语言要求：
   - 使用纯文本，不要用任何Markdown格式
   - 保持传统文化韵味
   - 逻辑清晰，分点说明
5. 示例格式：
   根据您的问题"..."，结合得到的${interpretationRequest.guaName}卦：
   - 卦象显示...
   - 具体分析...
   - 建议...`;

    const userMessage = this.buildUserMessage(interpretationRequest);

    const requestData: DeepSeekRequest = {
      model: 'deepseek-chat',
      messages: [
        { role: 'system', content: systemPrompt },
        { role: 'user', content: userMessage }
      ],
      temperature: 0.7,
      max_tokens: 1000,
      stream: false
    };

    try {
      const response = await axios.post<DeepSeekResponse>(this.apiUrl, requestData, {
        headers: {
          'Authorization': `Bearer ${this.apiKey}`,
          'Content-Type': 'application/json'
        }
      });

      const interpretation = response.data.choices[0]?.message?.content;
      
      return {
        interpretation: interpretation || '未能获取解读结果，请稍后重试。',
        advice: this.extractAdvice(interpretation),
        meaning: this.extractMeaning(interpretation)
      };
    } catch (error) {
      console.error('DeepSeek API调用失败:', error);
      return {
        interpretation: 'AI解卦服务暂时不可用，请稍后重试。',
        advice: '建议稍后重新尝试解卦。',
        meaning: '服务暂时不可用'
      };
    }
  }

  private buildUserMessage(request: DeepSeekInterpretationRequest): string {
    let message = `请解读以下卦象：
卦名：${request.guaName}
卦辞：${request.guaCi}
象辞：${request.xiangCi}`;

    if (request.changingYao && request.changingYao.length > 0) {
      message += `\n变爻位置：第${request.changingYao.join('、')}爻`;
    }

    if (request.userQuestion) {
      message += `\n用户问题：${request.userQuestion}`;
    }

    message += '\n\n请给出详细的卦象解读、含义分析和实用建议。';

    return message;
  }

  private extractAdvice(interpretation: string): string {
    // 简单的建议提取逻辑
    const adviceMatch = interpretation.match(/建议[：:]\s*(.+?)(?=\n|$)/);
    return adviceMatch ? adviceMatch[1] : '请参考卦象解读中的具体建议。';
  }

  private extractMeaning(interpretation: string): string {
    // 简单的含义提取逻辑
    const meaningMatch = interpretation.match(/含义[：:]\s*(.+?)(?=\n|$)/);
    return meaningMatch ? meaningMatch[1] : interpretation.substring(0, 200) + '...';
  }
}